package SuperClass;

class Animal{
    public  void move(){
        System.out.println("Animal could move !");
    }
}
class Fish extends Animal{
    public void move(){
        super.move();
        System.out.println("Fish could Swingming!");
    }
}
public class Main {
    public  static  void main(String[] args){
        Animal a=new Fish();//Fish object
        a.move();//Run Fish ClassMethods
    }
}
//重写（override）（覆盖）和重载(overload)(多个同名函数同时存在，具有不同的参数个数/类型)的区别
//Java的方法重载，就是在类中可以创建多个方法，它们具有相同的名字，但具有不同的参数和不同的定义。
//调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。
//无法以返回型别作为重载函数的区分标准。
//override和重写前的方法类型需要一致 ！ overload则需要不同的参数和类型
//public>protected>default>private

/*而重载的规则：

1）、必须具有不同的参数列表；

2）、可以有不同的返回类型，只要参数列表不同就可以了；

3）、可以有不同的访问修饰符；

4）、可以抛出不同的异常；

重载和重写（覆盖）的特点：

Override 特点
1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配，才能达到覆盖的效果；

2、覆盖的方法的返回值必须和被覆盖的方法的返回一致；

3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致，或者是其子类；

4、被覆盖的方法不能为private，否则在其子类中只是新定义了一个方法，并没有对其进行覆盖。

2.Overload 特点

1、在使用重载时只能通过不同的参数样式。例如，不同的参数类型，不同的参数个数，不同的参数顺序（当然，同一方法内的几个参数类型必须不一样，例如可以是fun(int, float)， 但是不能为fun(int, int)）；

2、不能通过访问权限、返回类型、抛出的异常进行重载；

3、方法的异常类型和数目不会对重载造成影响；

4、对于继承来说，如果某一方法在父类中是访问权限是priavte，那么就不能在子类对其进行重载，如果定义的话，也只是定义了一个新方法，而不会达到重载的效果。

总结：

override（重写）

1、方法名、参数、返回值相同。

2、子类方法不能缩小父类方法的访问权限。

3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。

4、存在于父类和子类之间。

5、方法被定义为final不能被重写。

overload（重载）

1、参数类型、个数、顺序至少有一个不相同。

2、不能重载只有返回值不同的方法名。

3、存在于父类和子类、同类中。

作者：yeying12321
链接：https://www.jianshu.com/p/2bb61c01fe54
来源：简书
著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。*/